\section{Nombre}

\texttt{Bench::Test::Local}

Automatiza ejecuciones en la máquina local

\section{Sinopsis}

\begin{verbatim}
   my $local = Bench::Test::Local->new(
      WORKDIR   => '.',
      EXECUTABLE => './mm',
      OUTPUTFILE => 'output.dat',
      BASEDIR   => './base_FEB',
   );
\end{verbatim}
\begin{verbatim}
   my $parameters = ...
   my $output = $local->get_result($parameters);
\end{verbatim}
\begin{verbatim}
   $local->save_result($parameters, $testname);
\end{verbatim}

\section{Descripción}

El objeto \texttt{Bench::Test::Local} permite encapsular la operación
de ejecución de programas en la máquina local. Dispone de dos
métodos que permiten obtener la salida de la ejecución o almacenarla
respectivamente: \texttt{get\_result} y \texttt{save\_result}

\subsection{Un ejemplo}

Supongamos un programa cuya salida sea la siguiente:

\begin{verbatim}
  ~/projects/Bench-Test/examples/mm$ ./mm dat/mm_200.dat 
  Filas primera matriz: 200
  Filas segunda matriz: 200
  Columnas segunda matriz: 200
  Time of product: 0.210942
  Result: 4102
\end{verbatim}

Creamos un objeto \texttt{Bench::Test::Local} de la siguiente forma:

\begin{verbatim}
   my $local = Bench::Test::Local->new(
      WORKDIR   => '.',
      EXECUTABLE => './mm',
   );
\end{verbatim}

Con una llamada a \texttt{get\_result} como la que sigue:

\begin{verbatim}
   my $output = $local->get_result('dat/mm_200');
\end{verbatim}

Obtendríamos en \texttt{\$output} una salida similar. En cambio,
con una llamada a \texttt{save\_result} como esta:

\begin{verbatim}
   $local->save_result('dat/mm_200', 'test200');
\end{verbatim}

La salida del programa sería almacenada en el fichero
\texttt{test200.base}.

\section{Métodos}
\subsection{El constructor \texttt{new}}

Véase una llamada típica:

\begin{verbatim}
  my $local = Bench::Test::Local->new(
      WORKDIR   => '.',
      EXECUTABLE => './mm',
  );
\end{verbatim}

El constructor acepta los siguientes parámetros:

\begin{description}

\item[{\texttt{WORKDIR:}}] \mbox{}

Directorio de trabajo donde se encuentra 
el ejecutable y desde donde se llevarán a cabo todas las ejecuciones.

\item[{\texttt{EXECUTABLE:}}] \mbox{}

Nombre del fichero ejecutable.

\item[{\texttt{OUTPUTFILE:}}] \mbox{}

Parámetro opcional que indica el nombre del fichero
donde se encuentra la salida de la ejecución del programa. Se
utiliza cuando el programa vuelca la salida en un fichero
en lugar de enviarla a la pantalla.

\item[{\texttt{BASEDIR:}}] \mbox{}

Nombre del directorio donde se creará el fichero \texttt{.base}
generado como consecuencia de la llamada a \texttt{save\_result}.

\item[{\texttt{GET\_RESULT} y \texttt{SAVE\_RESULT:}}] \mbox{}

Referencia a rutinas que serán llamadas
en lugar de \texttt{get\_result} y \texttt{save\_result}. Permite al usuario cambiar
el comportamiento por defecto de dichas rutinas.

\end{description}

\subsection{El método \texttt{get\_result}}

Véase una llamada típica:

\begin{verbatim}
   my $parameters = '-n 20 -p';
   my $output = $local->get_result($parameters);
\end{verbatim}

El método \texttt{get\_result} acepta como único parámetro una cadena que
indica los parámetros con los que se ejecutara el experimento
indicado en el constructor con el parámetro \texttt{EXECUTABLE}.

\subsection{El método \texttt{save\_result}}

Véase una llamada típica:

\begin{verbatim}
   $local->save_result($parameters, $testname);
\end{verbatim}

El método \texttt{save\_result} acepta igual que \texttt{get\_result} una
cadena de caracteres con los parámetros de ejecución para el ejecutable
definido con \texttt{EXECUTABLE} y el nombre del test correspondiente.

El método \texttt{save\_result} automatiza la ejecución invocando
al método \texttt{get\_result} y guardando la salida en un fichero
de texto ubicado en el directorio definido en el constructor
en el parámetro \texttt{BASEDIR}. El nombre del archivo se
obtiene concatenando el parámetro \texttt{\$testname} con la
extensión \texttt{.base}.

\section{Véase también}

Para una mejor comprensión del módulo \texttt{Bench::Test::Local},
véase también la documentación de los siguientes módulos:

\begin{itemize}
\item \texttt{Bench::Test}
\item \texttt{Bench::Test::Base}
\item \texttt{Bench::Test::Remote}
\end{itemize}
